package com.baidu.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.baidu.entity.PageResult;
import com.baidu.entity.QueryPageBean;
import com.baidu.mapper.CheckGroupMapper;
import com.baidu.pojo.CheckGroup;
import com.baidu.service.CheckGroupService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;

@Service(interfaceClass = CheckGroupService.class)
@Transactional //应为是业务层需要加一个事务。
public class CheckGroupServiceImpl implements CheckGroupService {

	//在同一个spring容器中使用Autowired

	@Autowired
	private CheckGroupMapper checkGroupMapper;//这是服务提供实现类。

	@Override
	public void addCheckGroup(Integer[] checkitemIds, CheckGroup checkGroup) {

		//先添加检查组，通过myBatis的插入并获取自增的id，来设置检查项与检查组的关联关系。
		checkGroupMapper.addCheckGroup(checkGroup);

		//添加关联关系

		if (checkitemIds.length>0 && checkitemIds !=null){

			HashMap<String ,Integer > map;//节约内存

			for (Integer checkitemId : checkitemIds) {

				map=new HashMap<>();

				map.put("checkitemId",checkitemId);
				map.put("checkGroupId",checkGroup.getId());//mybatis自动获得。

				checkGroupMapper.setcheckGroupIdAndcheckitemId(map);


			}


		}


	}

	@Override
	public PageResult pageQuery(QueryPageBean queryPageBean) {

		//开启分页助手，
		PageHelper.startPage(queryPageBean.getCurrentPage(),queryPageBean.getPageSize());

		//携带查询条件，调用dao层查询所有的检查组，
	Page<CheckGroup> pageList= checkGroupMapper.pageQuery(queryPageBean.getQueryString());

	//通过分页助手查询出来的分页集合，来获得各个分页参数。从而封装到	PageResult返回页面的json对象中。
			return new PageResult(pageList.getTotal(),pageList.getResult());


	}

	@Override//回显基本信息
	public CheckGroup findbyId(Integer id) {

	return 	checkGroupMapper.findbyId(id);

	}

	@Override//回显当前检查组的检查项id
	public List<Integer> findCheckItemIdsByGId(Integer id) {
		return 	checkGroupMapper.findCheckItemIdsByGId(id);
	}

	@Override
	public List<CheckGroup> findAll() {

		return checkGroupMapper.findAll();

	}

	@Override
	public void deleteByid(Integer id) {
		//根据检查组id清理中间表关联关系）
		checkGroupMapper.deleteAssociation(id);
		//删除检查组信息
		checkGroupMapper.deleteById(id);
		/*
		* 如果套餐关联的检查组，该检查项删不掉。所以为了不报错，还有查询套餐与检查组是否有关联统计。
		* */
	}


	@Override
	public void editCheckGroup(CheckGroup checkGroup, Integer[] checkitemIds) {

//在修改之前，先删除与该检查组所对应的检查项id。因为我们要重新赋值。相当于重新添加该检查组。
		checkGroupMapper.deleteCheckGroupidAndCheckItemid(checkGroup.getId());

	//修改检查项的基本信息
		checkGroupMapper.editCheckGroup(checkGroup);


		//添加关联关系

		if (checkitemIds.length>0 && checkitemIds !=null) {

			HashMap<String, Integer> map;//节约内存

			for (Integer checkitemId : checkitemIds) {

				map = new HashMap<>();

				map.put("checkitemId", checkitemId);
				map.put("checkGroupId", checkGroup.getId());//mybatis自动获得。

				checkGroupMapper.setcheckGroupIdAndcheckitemId(map);


			}


		}


	}


}
